怎么用指针p表示数组中元素 a[2][3] ?
来源:百度知道 编辑:UC知道 时间:2024/05/14 19:48:16
#include "stdafx.h"
#include "iostream"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int a[3][4];
int b=0;
int *p;
int *q;
for(int i=0;i<3;i++){
for(int t=0;t<4;t++)
{
b++;
a[i][t]=b;
}
}
p=&a[0][0];
q=&a[0][0];
cout
<<"\n*((p+2)+3) is:"<<*((p+2)+3)<<"\n*(a[2]+3) is:"<<
*(a[2]+3)<<"\n*(*(a+2)+3) is:"<<*(*(a+2)+3)
<<"\n*(*(p+2)+3)is:"
<<*(*(p+2)+3) //出现错误。错误提示:错误 //error C2100: 非法的间接寻址
<<endl;
for(int i=0;i<3;i++)
for(int t=0;t<4;t++)
cout<<a[i][t]<<endl;
return 0;
}
*(*(p+2)+3)
改为
*(p+2*4+3)
数组元素在内存中是顺序存储的,而数组a[3][4]的存储映射函数是
a[i][j] 等价于 *(&a[0][0]+4*i+j)
而p=&a[0][0],所以a[2][3] 等价于 *(p+2*4+3)
可以这样表示:*(p+3+4*2)
#include "iostream"
using namespace std;
int main()
{
int a[3][4];
int b=0;
int (*p)[4];
int *q;
for(int i=0;i<3;i++){
for(int t=0;t<4;t++)
{
b++;
a[i][t]=b;
}
}
p=&a[0];
q=&a[0][0];
cout
<<"\n*(*(p+2)+3) is:"<<*(*(p+2)+3)<<"\n*(a[2]+3) is:"
<<*(a[2]+3)<<"\n*(*(a+2)+3) is:"<<*(*(a+2)+3)
<<"\n*£¨*(p+2)+3£©is:"
<<*(*(p+2)+3) //³öÏÖ´íÎó¡£´íÎóÌáʾ£º´íÎó //error C2100: ·Ç·¨µÄ¼ä½ÓÑ°Ö·
<<endl;